// easy

// 给定一个二叉树，检测它是否左右对称的

// 解题思路： 递归遍历左右子树，然后判断当前节点的左右子节点，日过可以直接判断的情况，则跳出递归，直接返回结果，如果无法直接判断结果，则递归检测左右子树的外侧节点
// 是否相等，同理再递归检测左右子树的内测节点是否相等
function isSymmetric(root) {
    function check(left, right) {
        if (left===null && right===null) {
            return true
        } else if (left === null && right !== null) {
            return false
        } else if (left !== null && right === null) {
            return false
        } else if (left.val !== right.val) {
            return false
        }
        return check(left.left, right.right) && check(left.right, right.left)
    }
    if (root === null) {
        return true
    }
    return check(root.left, root.right)
}

const root = {
    val: 1,
    left: {
        val: 2,
        left: null,
        right: {
            val: 3,
            left: {
                val: 4,
                left: null,
                right: null
            },
            right: null
        },
    },
    right: {
        val: 2,
        left: {
            val: 3,
            left: null,
            right: {
                val: 4,
                left: null,
                right: null
            }
        },
        right: null
    },
};

console.log(isSymmetric(root))